package configClient;

/**
 * 配置中心客户端，一个key就对应一个配置中心客户端
 */
public interface ConfigClient {

    /**
     * 拉取 configKey 对应的 配置
     */
    String getConfig(String configKey);

    /**
     *
     * 拉取 远程 配置元信息
     */
    ConfigMetaInfo getRemoteConfigMetaInfo(String configKey);

    /**
     * check 配置是否发生改变
     * 使用版本号 + 创建时间 + 更新时间做对比
     * 如果上面的属性有任意一个对不上，那么说明配置发生了改变
     * 同时更新本地配置元信息
     */

    boolean configChange();


    /**
     * 初始化
     * 1. 拉取 configKey 源信息
     * 2. 拉取 configKey 对应的 配置
     */
    void init();

    /**
     * 重新拉取配置
     */
    void rePull();


    /**
     * 添加配置更改回调监听器
     */
    void addListenner(ConfigChangeListener configChangeListener);

}
